package logica.leitura;

import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;

public class LeitorTXT {

    File file;
    Scanner scanner;
    String linhaAtual;

    public LeitorTXT() throws FileNotFoundException {
        file = new File("testex.txt");
        linhaAtual = new String();

        try {
            scanner = new Scanner(file);
        } catch (NoSuchElementException nex) {
        }
    }

    public void lerProximaLinha() {
        if (scanner.hasNext()) {
            linhaAtual = scanner.nextLine();
        } else {
            try {
                scanner.close();
            } catch (NoSuchElementException ex) {
            }
        }
    }

    public int getNumeroCidade() throws NumberFormatException {
        String numero = new String();

        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) != ' ') {
                numero = numero + linhaAtual.charAt(i);
            } else {
                break;
            }
        }

        return Integer.parseInt(numero);

    }

    public String getNomeCidade() {
        String nomeCidade = new String();
        int posicao = 0;

        //For pra achar o inicio do nome.
        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == '"') {
                posicao = i + 1;
                break;
            }
        }

        //For pra pegar o nome
        for (int i = posicao; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) != '"') {
                nomeCidade = nomeCidade + linhaAtual.charAt(i);
            } else {
                break;
            }
        }

        return nomeCidade;
    }

    public float getPosicaoX() throws NumberFormatException {

        String posicaoX = new String();
        boolean jaLeuUmaAspa = false;
        int posicao = 0;

        //For pra achar o final da segunda aspa.
        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == '"') {
                if (jaLeuUmaAspa) {
                    posicao = i + 2;
                    break;
                } else {
                    jaLeuUmaAspa = true;
                }
            }
        }

        //Acha o numero da posicao x.
        for (int i = posicao; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) != ' ') {
                posicaoX = posicaoX + linhaAtual.charAt(i);
            } else {
                break;
            }
        }

        return Float.parseFloat(posicaoX);
    }

    public float getPosicaoY() throws NumberFormatException {

        String posicaoY = new String();
        boolean jaLeuUmaAspa = false;
        int posicao = 0;
        int inicioY = 0;

        //For pra achar o final da segunda aspa.
        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == '"') {
                if (jaLeuUmaAspa) {
                    posicao = i + 2;
                    break;
                } else {
                    jaLeuUmaAspa = true;
                }
            }
        }

        //Acha o numero da posicao y.
        for (int i = posicao; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == ' ') {
                inicioY = i + 1;
            }
        }

        //Acha o numero da posicao x.
        for (int i = inicioY; i < linhaAtual.length(); i++) {
            posicaoY = posicaoY + linhaAtual.charAt(i);
        }

        return Float.parseFloat(posicaoY);
    }

    public int getQuantidadeCidades() throws NumberFormatException{
        String quantidade = new String();
        boolean jaLeuUmEspaco = false;

        //Acha o numero da posicao x.
        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == ' ') {
                jaLeuUmEspaco = true;
                i++;
            }
            if(jaLeuUmEspaco){
                quantidade = quantidade + linhaAtual.charAt(i);
            }
        }

        return Integer.parseInt(quantidade);
    }

    //Busca o numero da cidade de ORIGEM de uma determinada aresta.
    //Retorna o mesmo em uma variável do tipo "int".
    public int getArestaOrigemCidade() throws NumberFormatException {
        String numero = new String();

        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) != ' ') {
                numero = numero + linhaAtual.charAt(i);
            } else {
                break;
            }
        }

        return Integer.parseInt(numero);

    }


    //Busca o numero da cidade de DESTINO de uma determinada aresta.
    //Retorna o mesmo em uma variável do tipo "int".
    public int getArestaDestinoCidade() throws NumberFormatException {
        String numero = new String();
        boolean jaLeuUmEspaco = false;

        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == ' ') {
                if(jaLeuUmEspaco){
                    break;
                }
                jaLeuUmEspaco = true;
                i++;
            }
            if (jaLeuUmEspaco) {
                numero = numero + linhaAtual.charAt(i);
                
            }
        }

        return Integer.parseInt(numero);

    }


    //Busca o PESO de uma determinada aresta.
    //Retorna o mesmo em uma variável do tipo "int".
    public int getPesoAresta() throws NumberFormatException {
        String numero = new String();
        boolean jaLeuUmEspaco = false;
        boolean jaLeuDoisEspacos = false;

        for (int i = 0; i < linhaAtual.length(); i++) {
            if (linhaAtual.charAt(i) == ' ') {
                if(jaLeuUmEspaco) {
                    jaLeuDoisEspacos = true;
                    jaLeuUmEspaco = false;
                    i++;
                }
                else {
                jaLeuUmEspaco = true;
                }
            }
            if(jaLeuDoisEspacos){               
                numero = numero + linhaAtual.charAt(i);
            }
        }

        return Integer.parseInt(numero);

    }



}//fim da classe LeitorTXT

